home *** CD-ROM | disk | FTP | other *** search
/ Softline PAY-CD / Softline PAY-CD(1994).iso / programm / ms_pub / demo / disk1 / msp2.ms_ / msp2.bin
Encoding:
Text File  |  1993-08-30  |  39.2 KB  |  1,401 lines

  1. GLOBAL hSetup AS INTEGER
  2. GLOBAL fFrameInit AS INTEGER
  3. GLOBAL fInstallInit AS INTEGER
  4.  
  5. CONST WF_STANDARD =   16
  6. CONST WF_ENHANCED =   32
  7. CONST WF_WINNT = 16384
  8.  
  9. CONST MB_OK    = 0
  10. CONST MB_ICONHAND = 16
  11. CONST MB_TASKMODAL   = 8192
  12.  
  13. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  14. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  15. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  16. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  17.  
  18. CONST cmoCopy  = 2
  19. CONST cmoOverwrite   = 1024
  20. CONST cmoNone  = 0
  21.  
  22. CONST femExists  = 0
  23.  
  24. CONST grcOkay    = 0
  25. CONST grcNotOkay = 1
  26. CONST grcUserQuit   = 48
  27.  
  28. CONST cbSymValMax = 512
  29.  
  30. CONST STFERR   = 1024
  31. CONST STFQUIT  = 1025
  32.  
  33. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  34. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  35. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  36. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  37.  
  38. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  39. DECLARE FUNCTION FDoDialogExt LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, szHelpDll$, HelpDlg%, szHelpProc$) AS INTEGER
  40. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  41. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  42. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  43. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  44. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  45. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  46. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  47. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  48. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  49.  
  50. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  51. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  52. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  53.  
  54. DECLARE SUB   ProSetPos LIB "msinsstf.dll" (x%, y%)
  55. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  56. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  57. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  58. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  59. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  60. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  61. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  62. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  63. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  64. DECLARE SUB   ResetCopyList LIB "msinsstf.dll"
  65. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  66. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  67. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  68. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  69. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  70.  
  71. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  72. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  73. DECLARE SUB UIPop (n%)
  74. DECLARE SUB UIPopAll
  75. DECLARE SUB SetTitle (sz$)
  76. DECLARE SUB ReadInfFile (szFile$)
  77. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  78. DECLARE SUB RemoveSymbol (szSym$)
  79. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  80. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  81. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  82. DECLARE SUB AddListItem(szSymbol$, szItem$)
  83. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  84.  
  85. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  86. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  87.  
  88. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  89. DECLARE SUB RestoreCursor (hPrev%)
  90. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  91.  
  92. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  93. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  94. DECLARE SUB CopyFilesInCopyList
  95. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  96. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  97. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  98. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  99. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  100. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  101. DECLARE SUB ClearCopyList
  102. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  103. DECLARE SUB InitInstall
  104. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  105. DECLARE SUB SetCopyGaugePosition (x%, y%)
  106. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  107.  
  108. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  109. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  110. DECLARE FUNCTION GetWindowsMode AS INTEGER
  111. DECLARE FUNCTION GetWindowsDir  AS STRING
  112. DECLARE FUNCTION GetWindowsSysDir AS STRING
  113.  
  114. DECLARE FUNCTION CbGetVersionOfFile LIB "msdetstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  115. DECLARE FUNCTION GetVersionOfFile(szFile$) AS STRING
  116.  
  117. DECLARE FUNCTION CbGetIniKeyString LIB "msdetstf.dll" (szFile$, szSect$, szKey$, szBuf$, cbBuf%) AS INTEGER
  118. DECLARE FUNCTION GetIniKeyString (szFile$, szSect$, szKey$) AS STRING
  119. DECLARE FUNCTION StripDir (szPath$) AS STRING
  120.  
  121. FUNCTION StripDir (szPath$) STATIC AS STRING
  122.  IF szPath$ = "" THEN
  123.   StripDir = ""
  124.   GOTO STRIPRET
  125.  ELSEIF (MID$(szPath$, LEN(szPath$), 1)) = "\" THEN
  126.   szPath$ = MID$(szPath$, 1, LEN(szPath$)-1)
  127.  END IF
  128.  cChar% = 1
  129.  WHILE (cChar% <> 0)
  130.   cLast% = cChar%
  131.   cChar% = INSTR(cLast%+1, szPath$, "\")
  132.  WEND
  133.  StripDir = MID$(szPath$, 1, cLast%-1)
  134. STRIPRET:
  135. END FUNCTION
  136.  
  137.  
  138. FUNCTION GetIniKeyString (szFile$, szSect$, szKey$) STATIC  AS STRING
  139.  cb% = 512
  140.  szBuf$ = STRING$(cb%, 32)
  141.  cbRet% = CbGetIniKeyString(szFile$, szSect$, szKey$, szBuf$, cb%)
  142.  GetIniKeyString = szBuf$
  143.  szBuf$ = ""
  144. END FUNCTION
  145.  
  146. FUNCTION GetVersionOfFile (szFile$) STATIC AS STRING
  147.  cb% = 30
  148.  szBuf$ = STRING$(cb%, 32)
  149.  cbRet% = CbGetVersionOfFile(szFile$, szBuf$, cb%)
  150.  GetVersionOfFile = szBuf$
  151.  szBuf$ = ""
  152. END FUNCTION
  153.  
  154. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  155.  fFrameInit = 0
  156.  fInstallInit = 0
  157.  
  158.  IF hSetup > 0 THEN
  159.  END IF
  160.  
  161.  i% = InitFrame(szCmdLine$)
  162.  fFrameInit = 1
  163.  
  164.  InitInstall
  165.  fInstallInit = 1
  166.  
  167.  InitSetup = i%
  168. END FUNCTION
  169.  
  170. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  171.  IF hSetup > 0 THEN
  172.  ELSE
  173.   i% = InitializeFrame(szCmdLine$)
  174.   IF i% = -1 THEN
  175.    END
  176.   ELSEIF i% = 0 THEN
  177.    END
  178.   ELSE
  179.    InitFrame = i%
  180.   END IF
  181.  END IF
  182. END FUNCTION
  183.  
  184. SUB SetBitmap(szDll$, Bitmap%) STATIC
  185.  IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  186.   ERROR STFERR
  187.  END IF
  188. END SUB
  189.  
  190. SUB SetTitle(sz$) STATIC
  191.  SetWindowText HwndFrame(), sz$
  192. END SUB
  193.  
  194. SUB ReadInfFile (szFile$) STATIC
  195.  IF FOpenInf(szFile$, 1, 0) = 0 THEN
  196.   ERROR STFERR
  197.  END IF
  198. END SUB
  199.  
  200. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  201.  IF FDoDialogExt(HwndFrame(), szDll$, Dlg%, szDlgProc$, szDll$, HelpDlg%, szHelpProc$) = 0 THEN
  202.   ERROR STFERR
  203.  ELSE
  204.   UIStartDlg = GetSymbolValue("DLGEVENT")
  205.  END IF
  206. END FUNCTION
  207.  
  208. SUB UIPop (n%) STATIC
  209.  IF FKillNDialogs(n%) = 0 THEN
  210.   ERROR STFERR
  211.  END IF
  212. END SUB
  213.  
  214. SUB UIPopAll STATIC
  215.  IF FKillNDialogs(65535) = 0 THEN
  216.   ERROR STFERR
  217.  END IF
  218. END SUB
  219.  
  220. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  221.  szValue$ = string$(cbSymValMax,32)
  222.  Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  223.  GetSymbolValue = szValue$
  224.  IF Length% >= cbSymValMax THEN
  225.   ERROR STFERR
  226.  END IF
  227.  IF szSymbol$ = "" THEN
  228.   ERROR STFERR
  229.  END IF
  230.  szValue$ = ""
  231. END FUNCTION
  232.  
  233. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  234.  GetListLength = UsGetListLength(szSymbol$)
  235.  IF szSymbol$ = "" THEN
  236.   ERROR STFERR
  237.  END IF
  238. END FUNCTION
  239.  
  240. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  241.  szListItem$ = string$(cbSymValMax,32)
  242.  Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  243.  GetListItem = szListItem$
  244.  IF Length% >= cbSymValMax THEN
  245.   ERROR STFERR
  246.  END IF
  247.  IF szListSymbol$ = "" THEN
  248.   ERROR STFERR
  249.  END IF
  250.  if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  251.   ERROR STFERR
  252.  end if
  253.  szListItem$ = ""
  254. END FUNCTION
  255.  
  256. SUB AddListItem(szSymbol$, szItem$) STATIC
  257.  IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  258.   ERROR STFERR
  259.  END IF
  260. END SUB
  261.  
  262. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  263.  IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  264.   ERROR STFERR
  265.  END IF
  266. END SUB
  267.  
  268. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  269.  IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  270.   ERROR STFERR
  271.  END IF
  272. END SUB
  273.  
  274. SUB RemoveSymbol(szSym$) STATIC
  275.  IF FRemoveSymbol(szSym$) = 0 THEN
  276.   ERROR STFERR
  277.  END IF
  278. END SUB
  279.  
  280. FUNCTION ShowWaitCursor STATIC AS INTEGER
  281.  ShowWaitCursor = HShowWaitCursor
  282. END FUNCTION
  283.  
  284. SUB RestoreCursor (hPrev%) STATIC
  285.  i% = FRestoreCursor(hPrev%)
  286.  IF i% = 0 THEN
  287.   ERROR STFERR
  288.  END IF
  289. END SUB
  290.  
  291. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  292.  IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  293.   ERROR STFERR
  294.  END IF
  295. END SUB
  296.  
  297. SUB InitInstall STATIC
  298.  IF hSetup > 0 THEN
  299.  ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  300.   END
  301.  END IF
  302. END SUB
  303.  
  304. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  305.  IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  306.   ERROR STFERR
  307.  END IF
  308. END SUB
  309.  
  310.  
  311. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  312.  IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  313.   ERROR STFERR
  314.  END IF
  315. END SUB
  316.  
  317. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  318.  IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  319.   ERROR STFERR
  320.  END IF
  321. END SUB
  322.  
  323. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  324.  IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  325.   ERROR STFERR
  326.  END IF
  327. END SUB
  328.  
  329. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  330.  IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  331.   ERROR STFERR
  332.  END IF
  333. END SUB
  334.  
  335. SUB ClearCopyList STATIC
  336.  ResetCopyList
  337. END SUB
  338.  
  339. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  340.  lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  341.  IF lNeed& < 0 THEN
  342.   ERROR STFERR
  343.  END IF
  344.  GetCopyListCost = lNeed&
  345. END FUNCTION
  346.  
  347. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  348.  szItemNew$ = szItem$
  349.  IF szOther$ <> "" THEN
  350.   szItemNew$ = szItem$ + "," + szOther$
  351.  END IF
  352.  
  353.  IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  354.   ERROR STFERR
  355.  END IF
  356.  szItemNew$ = ""
  357. END SUB
  358.  
  359. SUB CopyFilesInCopyList STATIC
  360.  grc% = GrcCopyFilesInCopyList (HinstFrame())
  361.  
  362.  IF grc% = grcUserQuit THEN
  363.   ERROR STFQUIT
  364.  ELSEIF grc% > 0 THEN
  365.   ERROR STFERR
  366.  END IF
  367. END SUB
  368.  
  369. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  370.  IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  371.   ERROR STFERR
  372.  END IF
  373. END SUB
  374.  
  375. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  376.  IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  377.   ERROR STFERR
  378.  END IF
  379. END SUB
  380.  
  381. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  382.  IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  383.   ERROR STFERR
  384.  END IF
  385. END SUB
  386.  
  387. SUB SetCopyGaugePosition (x%, y%) STATIC
  388.  ProSetPos x%, y%
  389. END SUB
  390.  
  391. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  392.  IsDirWritable = FIsDirWritable(szDir$)
  393. END FUNCTION
  394.  
  395. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  396.  GetWindowsMajorVersion = GetVersion() MOD 256
  397. END FUNCTION
  398.  
  399. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  400.  GetWindowsMinorVersion = GetVersion() / 256
  401. END FUNCTION
  402.  
  403. FUNCTION GetWindowsMode STATIC AS INTEGER
  404.  GetWindowsMode = 0
  405.  longTmp& = GetWinFlags()
  406.  IF longTmp& AND WF_WINNT THEN
  407.   GetWindowsMode = 3
  408.  ELSEIF longTmp& AND WF_STANDARD THEN
  409.   GetWindowsMode = 1
  410.  ELSEIF longTmp& AND WF_ENHANCED THEN
  411.   GetWindowsMode = 2
  412.  END IF
  413. END FUNCTION
  414.  
  415. FUNCTION GetWindowsDir STATIC AS STRING
  416.  szBuf$ = string$(256, 32)
  417.  cbBuf% = GetWindowsDirectory(szBuf$, 256)
  418.  
  419.  IF cbBuf% = 0 THEN
  420.   GetWindowsDir = ""
  421.   ERROR STFERR
  422.  ELSE
  423.   IF cbBuf% > 255 THEN
  424.    ERROR STFERR
  425.   END IF
  426.   szBuf$ = RTRIM$(szBuf$)
  427.   IF MID$(szBuf$, 1, 1) = "\" THEN
  428.    szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  429.   ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  430.    szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  431.   END IF
  432.   GetWindowsDir = szBuf$
  433.  END IF
  434.  
  435.  szBuf$ = ""
  436. END FUNCTION
  437.  
  438. FUNCTION GetWindowsSysDir STATIC AS STRING
  439.  szBuf$ = string$(256, 32)
  440.  cbBuf% = GetSystemDirectory(szBuf$, 256)
  441.  
  442.  IF cbBuf% = 0 THEN
  443.   ERROR STFERR
  444.  ELSE
  445.   IF cbBuf% > 255 THEN
  446.    ERROR STFERR
  447.   END IF
  448.   szBuf$ = RTRIM$(szBuf$)
  449.   IF MID$(szBuf$, 1, 1) = "\" THEN
  450.    szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  451.   ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  452.    szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  453.   END IF
  454.   GetWindowsSysDir = szBuf$
  455.  END IF
  456.  
  457.  szBuf$ = ""
  458. END FUNCTION
  459.  
  460. CONST ynrcNo = 0
  461.  
  462. DECLARE FUNCTION LcbFreeDrive LIB "msdetstf.dll" (nDrive%) AS LONG
  463. DECLARE FUNCTION FDoesFileExist LIB "msdetstf.dll" (szFileName$, mode%) AS INTEGER
  464. DECLARE FUNCTION FDoesIniKeyExist LIB "msdetstf.dll" (szFile$, szSect$, szKey$) AS INTEGER
  465. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  466. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  467. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  468.  
  469. DECLARE FUNCTION GetFreeSpaceForDrive (szDrive$) AS LONG
  470. DECLARE FUNCTION DoesFileExist (szFile$, mode%) AS INTEGER
  471. DECLARE FUNCTION DoesIniKeyExist (szFile$, szSect$, szKey$) AS INTEGER
  472. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  473. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  474. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  475.  
  476. FUNCTION GetFreeSpaceForDrive (szDrive$) STATIC  AS LONG
  477.  GetFreeSpaceForDrive = LcbFreeDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1)
  478. END FUNCTION
  479.  
  480. FUNCTION DoesFileExist (szFileName$, mode%) STATIC  AS INTEGER
  481.  DoesFileExist = FDoesFileExist(szFileName$, mode%)
  482. END FUNCTION
  483.  
  484. FUNCTION DoesIniKeyExist (szFile$, szSect$, szKey$) STATIC  AS INTEGER
  485.  DoesIniKeyExist = FDoesIniKeyExist(szFile$, szSect$, szKey$)
  486. END FUNCTION
  487.  
  488. SUB RenameFile (szFullPath$, szBackup$) STATIC
  489.  i% = YnrcBackupFile(szFullPath$, szBackup$, cmoNone)
  490. END SUB
  491.  
  492. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  493.  i% = YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo
  494. END SUB
  495.  
  496. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  497.  IF FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  498.   ERROR STFERR
  499.  END IF
  500. END SUB
  501.  
  502. TRAP CleanupTrap From "MSSHLSTF.DLL"
  503.  
  504. End Trap
  505.  
  506. hSetup = InitSetup(COMMAND$)
  507.  
  508. ON ERROR GOTO QUIT
  509.  
  510. CONST MaxSectionLen = 32
  511. CONST MaxPathLen = 64
  512. CONST MaxListLen = 12
  513.  
  514. TYPE FILEGRP
  515.  OptionId As INTEGER
  516.  Section AS STRING * MaxSectionLen
  517.  Needs   AS STRING * MaxListLen
  518.  ExtraNeeds AS INTEGER
  519.  
  520.  SourcePath AS STRING * MaxPathLen
  521.  DestPath AS STRING * MaxPathLen
  522.  
  523.  InList  AS POINTER TO STRING * MaxListLen
  524.  OutList AS POINTER TO STRING * MaxListLen
  525.  
  526. END TYPE
  527.  
  528. CONST APPFILES = 0
  529. CONST PUBFLTFILES = 1
  530. CONST WINFILES = 2
  531. CONST WINSYSFILES = 3
  532. CONST WORDARTFILES = 4
  533. CONST ARTGALRYFILES = 5
  534. CONST PUBFILES = 6
  535. CONST WIZFILES = 7
  536. CONST WIZCGMFILES = 8
  537. CONST BDRFILES = 9
  538.  
  539. CONST MAXFILEGROUP = 10
  540.  
  541. CONST APPOPTION = 1
  542. CONST TEMPOPTION = 2
  543. CONST ARTSOPTION = 3
  544. CONST FONTOPTION = 4
  545.  
  546. CONST MAXOPTIONGROUP = 5
  547.  
  548. GLOBAL FileGrp(MAXFILEGROUP) AS FILEGRP
  549.  
  550. DECLARE FUNCTION GetListFromStringTable LIB "mscuistf.dll" as INTEGER
  551.  
  552. DECLARE SUB AddListOptFiles(FileID%)
  553. DECLARE SUB AddFileGrpToCopyList(FileID%)
  554. DECLARE SUB ChangeDestPath (FileID%, DestPath$)
  555. DECLARE SUB InitFileGroup(FileID%, OptionID%, ExtraNeeds%, Section$, SourcePath$, ListID%)
  556. DECLARE SUB AddOptionGrpToCopyList(SectionId%)
  557. DECLARE FUNCTION WasFileCopied(FileID%, nID%) AS INTEGER
  558.  
  559. SUB InitFileGroup(FileID%, OptionID%, ExtraNeeds%, Section$, SourcePath$, ListID%) STATIC
  560.  
  561.  FileGrp(FileID%).OptionId = OptionID%
  562.  FileGrp(FileID%).Section = Section$
  563.  FileGrp(FileID%).Needs = MID$(Section$,1,3) + MID$(STR$(FileID%),2) + "Needs"
  564.  FileGrp(FileID%).ExtraNeeds = ExtraNeeds
  565.  FileGrp(FileID%).SourcePath = SourcePath$
  566.  FileGrp(FileID%).DestPath = ""
  567.  
  568.  IF ListID% <> 0 THEN
  569.   ALLOCATE FileGrp(FileID%).InList , 1
  570.   ALLOCATE FileGrp(FileID%).OutList, 1
  571.  
  572.   FileGrp(FileID%).InList[0] = MID$(Section$,1,3) + MID$(STR$(FileID%),2) + "In"
  573.   FileGrp(FileID%).OutList[0] = MID$(Section$,1,3) + MID$(STR$(FileID%),2) + "Out"
  574.  
  575.   SetSymbolValue "ListSymbol", FileGrp(FileID%).InList[0]
  576.   SetSymbolValue "ListID", STR$(ListID)
  577.   i% = GetListFromStringTable()
  578.   SetSymbolValue "ListSymbol", FileGrp(FileID%).OutList[0]
  579.   i% = GetListFromStringTable()
  580.   RemoveSymbol "ListSymbol"
  581.   RemoveSymbol "ListID"
  582.  END IF
  583.  
  584. END SUB
  585.  
  586. STATIC SUB AddFileGrpToCopyList(FileID%)
  587.  AddSectionFilesToCopyList RTRIM$(FileGrp(FileID%).Section), RTRIM$(FileGrp(FileID%).SourcePath), RTRIM$(FileGrp(FileID%).DestPath)
  588. END SUB
  589.  
  590. SUB AddOptionGrpToCopyList(OptionId%) STATIC
  591.  FOR cCount% = 0 TO (MAXFILEGROUP-1) STEP 1
  592.   IF FileGrp(cCount%).OptionId = OptionId% THEN
  593.    AddSectionFilesToCopyList RTRIM$(FileGrp(cCount%).Section), RTRIM$(FileGrp(cCount%).SourcePath), RTRIM$(FileGrp(cCount%).DestPath)
  594.   END IF
  595.  NEXT cCount%
  596. END SUB
  597.  
  598. STATIC SUB AddListOptFiles(FileID%)
  599.  
  600.  InputList$ = FileGrp(FileID%).InList[0]
  601.  OutputList$ = FileGrp(FileID%).OutList[0]
  602.  Section$ = RTRIM$(FileGrp(FileID%).Section)
  603.  
  604.  NoOfInput% = GetListLength(InputList$)
  605.  NoOfOutput% = GetListLength(OutputList$)
  606.  
  607.  j% = 1
  608.  FOR i% = 1 To NoOfOutput% STEP 1
  609.  
  610.   WHILE (GetListItem(OutputList$, i%) <> GetListItem(InputList$, j%))
  611.    j% = j% + 1
  612.    IF (j% > NoOfInput%) THEN
  613.     EXIT FOR
  614.    END IF
  615.   WEND
  616.  
  617.   szKey$ = RTRIM$(FileGrp(FileID%).Section) + MID$(STR$(j%), 2)
  618.  
  619.   AddSectionKeyFileToCopyList RTRIM$(FileGrp(FileID%).Section), szKey$, RTRIM$(FileGrp(FileID%).SourcePath), RTRIM$(FileGrp(FileID%).DestPath)
  620.  
  621.  NEXT i%
  622.  
  623.  InputList$ = ""
  624.  OutputList$ = ""
  625.  Section$ = ""
  626. END SUB
  627.  
  628. FUNCTION WasFileCopied(FileID%, nID AS INTEGER) STATIC AS INTEGER
  629.  
  630.  WasFileCopied = 0
  631.  
  632.  InputList$ = FileGrp(FileID%).InList[0]
  633.  OutputList$ = FileGrp(FileID%).OutList[0]
  634.  
  635.  NoOfInput% = GetListLength(InputList$)
  636.  NoOfOutput% = GetListLength(OutputList$)
  637.  
  638.  j% = 1
  639.  FOR i% = 1 To NoOfOutput% STEP 1
  640.  
  641.   WHILE (GetListItem(OutputList$, i%) <> GetListItem(InputList$, j%))
  642.    j% = j% + 1
  643.    IF (j% > NoOfInput%) THEN
  644.     EXIT FOR
  645.    END IF
  646.   WEND
  647.  
  648.   IF j% = nID% THEN
  649.    WasFileCopied = 1
  650.   END IF
  651.  
  652.  NEXT i%
  653.  
  654.  InputList$ = ""
  655.  OutputList$ = ""
  656.  
  657. END FUNCTION
  658.  
  659. SUB ChangeDestPath (FileID%, DestPath$) STATIC
  660.  FileGrp(FileID%).DestPath = DestPath$
  661. END SUB
  662.  
  663. TYPE DRIVESTAT
  664.  Drive AS STRING * 1
  665.  DriveNo AS INTEGER
  666.  Cost AS LONG
  667.  Free AS LONG
  668. END TYPE
  669.  
  670. GLOBAL EXTRACOSTS$
  671.  
  672. DECLARE SUB InitSizeCalLib
  673. DECLARE SUB InitDriveStat(DriveStat AS POINTER TO DRIVESTAT, Drive$)
  674. DECLARE SUB RecalcPath
  675. DECLARE SUB SetDriveStatus(DriveStat AS POINTER TO DRIVESTAT, NoOfDrive%)
  676. DECLARE SUB RecalcOptFiles(OptionID%)
  677.  
  678. SUB InitSizeCalLib STATIC
  679.  EXTRACOSTS$  = "ExtraCosts"
  680.  FOR i% = 1 TO 26 STEP 1
  681.   AddListItem EXTRACOSTS$, "0"
  682.  NEXT i%
  683. END SUB
  684.  
  685. SUB InitDriveStat(DriveStat AS POINTER TO DRIVESTAT, Drive$) STATIC
  686.  DriveStat[0].Drive = MID$(Drive$, 1, 1)
  687.  DriveStat[0].DriveNo = ASC(UCASE$(DriveStat[0].Drive)) - ASC("A") + 1
  688.  DriveStat[0].Cost = 0
  689.  DriveStat[0].Free = 0
  690. END SUB
  691.  
  692. SUB SetDriveStatus(DriveStat AS POINTER TO DRIVESTAT, NoOfDrive%) STATIC
  693.  FOR cCount% = 0 TO (NoOfDrive-1) STEP 1
  694.   cost& = 0
  695.   OptionID% = 1
  696.   FOR cCount2% = 0 TO (MAXFILEGROUP-1) STEP 1
  697.    IF FileGrp(cCount2%).OptionId = OptionID% THEN
  698.     cost& = cost& + VAL(GetListItem(FileGrp(cCount2%).Needs, DriveStat[cCount%].DriveNo))
  699.     OptionID = OptionID + 1
  700.    END IF
  701.   NEXT cCount2%
  702.   DriveStat[cCount%].Cost = cost&
  703.  
  704.   DriveStat[cCount%].Free = GetFreeSpaceForDrive(DriveStat[cCount%].Drive)
  705.  NEXT cCount%
  706. END SUB
  707.  
  708. SUB RecalcPath STATIC
  709.  FOR cCount% = 1 TO (MAXOPTIONGROUP - 1)
  710.   RecalcOptFiles cCount%
  711.  NEXT cCount%
  712. END SUB
  713.  
  714. SUB RecalcOptFiles(OptionID%) STATIC
  715.  
  716.  ClearCopyList
  717.  AddOptionGrpToCopyList OptionId%
  718.  
  719.  FOR cCount% = 0 TO (MAXFILEGROUP-1) STEP 1
  720.  
  721.   IF FileGrp(cCount%).OptionId = OptionId% THEN
  722.    ListSym$ = FileGrp(cCount%).Needs
  723.  
  724.    fExtra% = 0
  725.    ndrive% = ASC(ucase$(MID$(FileGrp(cCount%).DestPath,1,1))) - ASC("A") + 1
  726.    ExtraNeeds% =0
  727.    FOR cCount2% = 0 TO (MAXFILEGROUP-1) STEP 1
  728.     IF (FileGrp(cCount2%).OptionId = OptionId%) AND (FileGrp(cCount2%).ExtraNeeds <> 0) THEN
  729.      ExtraNeeds% = ExtraNeeds% + FileGrp(cCount2%).ExtraNeeds
  730.      fExtra% = 1
  731.     END IF
  732.    NEXT cCount2%
  733.  
  734.    IF ExtraNeeds% <> 0 THEN
  735.     ReplaceListItem EXTRACOSTS$, ndrive%, STR$(ExtraNeeds% * 1024)
  736.    ELSE
  737.     ReplaceListItem EXTRACOSTS$, ndrive%, STR$(0)
  738.    END IF
  739.  
  740.    cost& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  741.  
  742.    EXIT FOR
  743.   END IF
  744.  NEXT cCount%
  745.  
  746.  IF fExtra% THEN
  747.   ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  748.  END IF
  749.  
  750.  ListSym$ = ""
  751. END SUB
  752.  
  753. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  754. DECLARE FUNCTION FilePath (FileID%, szFile$) AS STRING
  755. DECLARE FUNCTION WinVersion(MajorVer%, MinorVer%) AS INTEGER
  756. DECLARE SUB SetIniKeyValue(szFile$, szSect$, szKey$, szValue$)
  757.  
  758. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  759.  IF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  760.   MakePath = szDir$ + szFile$
  761.  ELSE
  762.   MakePath = szDir$ + "\" + szFile$
  763.  END IF
  764. END FUNCTION
  765.  
  766. FUNCTION FilePath (FileID%, szFile$) STATIC AS STRING
  767.  szDir$ = RTRIM$(FileGrp(FileID%).DestPath)
  768.  IF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  769.   FilePath = szDir$ + szFile$
  770.  ELSE
  771.   FilePath = szDir$ + "\" + szFile$
  772.  END IF
  773.  szDir$ = ""
  774. END FUNCTION
  775.  
  776. FUNCTION WinVersion(MajorVer%, MinorVer%) STATIC AS INTEGER
  777.  i% = GetWindowsMajorVersion()
  778.  j% = GetWindowsMinorVersion()
  779.  
  780.  IF (i% > MajorVer%) OR ((i% = MajorVer%) AND (j% >= MinorVer%)) THEN
  781.   WinVersion = 1
  782.  ELSE
  783.   WinVersion = 0
  784.  END IF
  785. END FUNCTION
  786.  
  787. SUB SetIniKeyValue(szFile$, szSect$, szKey$, szValue$) STATIC
  788.  IF DoesIniKeyExist(szFile$, szSect$, szKey$) THEN
  789.    RemoveIniKey szFile$, szSect$, szKey$, cmoNone
  790.  END IF
  791.  
  792.  CreateIniKeyValue szFile$, szSect$, szKey$, szValue$, cmoNone
  793. END SUB
  794.  
  795. CONST WELCOME = 100
  796. CONST ASKQUIT = 200
  797. CONST DESTPATHN = 300
  798. CONST EXITFAILURE = 400
  799. CONST BILLBOARD = 4545
  800. CONST EXITSUCCESS = 700
  801. CONST OPTIONS = 800
  802. CONST APPHELP = 900
  803. CONST SETUPOPTIONS = 1000
  804. CONST PREVPUB = 1100
  805. CONST HELPPATH = 1200
  806. CONST HELPCUST = 1300
  807. CONST CALCFILE = 1400
  808. CONST WRITEINI = 1500
  809. CONST EXITREBOOT = 1600
  810. CONST MULTILIST = 5200
  811. CONST CUSTINST = 6200
  812. CONST TOOBIG = 6300
  813. CONST BADPATH = 6400
  814.  
  815. CONST STFVERERR = 124
  816. CONST STFPUBRUN = 125
  817. CONST STFSHARE  = 126
  818. CONST STFNODE   = 127
  819. CONST STFNONODE = 128
  820. CONST STFPUBINST= 131
  821.  
  822. CONST SCOK      = 0
  823. CONST SCREBOOT  = 1
  824. CONST SCERROR   = 2
  825.  
  826. CONST NORMAL_MODE = 0
  827. CONST ADMIN_MODE = 1
  828. CONST NETWORK_MODE = 2
  829.  
  830. CONST COVLIST = 265
  831. CONST FLTLIST = 285
  832.  
  833. CONST MSPNODISK = 17
  834.  
  835. CONST NoOfSTATUS = 7
  836. CONST ALL = 0
  837.  
  838. CONST LOGO = 1
  839.  
  840. CONST WS_VISIBLE=&H10000000
  841. CONST WS_BORDER =&H00800000
  842. CONST WS_CLIPCHILDREN =&H02000000
  843. CONST GWL_STYLE =-16
  844. CONST SW_SHOWMAXIMIZED=3
  845.  
  846. GLOBAL CUIDLL$
  847. GLOBAL WINDRIVE$
  848. GLOBAL SOURCE$
  849. GLOBAL DEST$
  850. GLOBAL DLG$
  851.  
  852. GLOBAL PubVersion%
  853. GLOBAL RenamedPub%
  854.  
  855. CONST  MaxDrive  = 2
  856. GLOBAL DriveStat(MaxDrive) AS DRIVESTAT
  857. CONST WindowsDrive  = 0
  858. CONST DestDrive  = 1
  859.  
  860. GLOBAL DRIVETEXT$
  861. GLOBAL HELPPROC$
  862.  
  863. GLOBAL SETUP_MODE%
  864. GLOBAL FINCUST%
  865. GLOBAL RB%
  866.  
  867. DECLARE SUB CallDlg(DlgIDNo%, DlgProc$, HelpIDNo%)
  868. DECLARE SUB QuitProc
  869. DECLARE SUB InstallFiles
  870. DECLARE SUB SetDriveText(DriveStat AS POINTER TO DRIVESTAT)
  871. DECLARE SUB ChangeFileDestPath
  872. DECLARE SUB UpdateSizeCal(OptionNo%, fRecalc%)
  873. DECLARE SUB UpdateScreenStatus(OptionNo%)
  874. DECLARE SUB CalcFileSizes
  875. DECLARE SUB UpdatePubIni
  876. DECLARE SUB UpdateWinIni
  877. DECLARE SUB UpdateRegDat
  878. DECLARE SUB MakeReg(Load$, FileID%, szReg$, szExe$)
  879.  
  880. DECLARE FUNCTION GETPATH(DefaultPath$, DlgTextID%) AS STRING
  881. DECLARE FUNCTION BitmapCntrlInit LIB "mscuistf.dll" as INTEGER
  882. DECLARE FUNCTION DARBitmapInit LIB "mscuistf.dll" as INTEGER
  883. DECLARE FUNCTION DoMessageBox LIB "mscuistf.dll" as INTEGER
  884. DECLARE FUNCTION IsPubRunning LIB "mscuistf.dll" as INTEGER
  885. DECLARE FUNCTION RunPub LIB "mscuistf.dll" as INTEGER
  886. DECLARE FUNCTION ScAddShare LIB "mscuistf.dll" as INTEGER
  887. DECLARE FUNCTION ShowWindow LIB "user.exe" (hWnd%,iShow%) AS INTEGER
  888. DECLARE FUNCTION SetWindowLong LIB "user.exe" (hWnd%, offset%, style&) AS LONG
  889. DECLARE FUNCTION WritePrivateProfileString LIB "Kernel" (lpstr$, lpstr$, lpstr$, lpstr$) as INTEGER
  890. DECLARE FUNCTION FMakeReg LIB "mscuistf.dll" (lpstr$, lpstr$) AS INTEGER
  891.  
  892. INIT:
  893.  CUIDLL$ = "mscuistf.dll"
  894.  HELPPROC$ = "FHelpDlgProc"
  895.  
  896.  hWnd% = HwndFrame()
  897.  j& = SetWindowLong(hWnd%,GWL_STYLE,WS_VISIBLE + WS_BORDER + WS_CLIPCHILDREN)
  898.  i% = ShowWindow(hWnd%,SW_SHOWMAXIMIZED)
  899.  
  900.  SetBitmap CUIDLL$, LOGO
  901.  
  902.  ''INTL
  903.  SetTitle "Microsoft Publisher Demo Setup"
  904.  
  905.  i% = DARBitmapInit()
  906.  i% = SetDecompMode(1)
  907.  
  908.  IF WinVersion(3,10) = 0 THEN
  909.   ERROR STFVERERR
  910.  END IF
  911.  
  912.  szInf$ = GetSymbolValue("STF_SRCINFPATH")
  913.  IF szInf$ = "" THEN
  914.   szInf$ = GetSymbolValue("STF_CWDDIR") + "MSPUB.INF"
  915.  END IF
  916.  ReadInfFile szInf$
  917.  szInf$ = ""
  918.  
  919.  SOURCE$  = GetSymbolValue("STF_SRCDIR")
  920.  
  921.  SourceDll$ = SOURCE$
  922.  
  923.  '' detection of publisher
  924.  INSTALLED$ = GetIniKeyString("WIN.INI", "Extensions", "pub")
  925.  INSTALLED$ = MID$(INSTALLED$, 1, INSTR(INSTALLED$, " ")-1)
  926.  DEST$ = StripDir(INSTALLED$)
  927.  IF DEST$ = "" THEN
  928.   DEST$ = mid$(GetWindowsDir,1,1) + ":\MSPUB"
  929.  END IF
  930.  PubVersion% = VAL(MID$(GetVersionOfFile(INSTALLED$),1,1))
  931.  IF PubVersion% = 2 THEN
  932.   ERROR STFPUBINST
  933.  END IF
  934.  RenamedPub% = 0
  935.  INSTALLED$ = ""
  936.  
  937.  InitDriveStat VARPTR(DriveStat(WindowsDrive)), DEST$
  938.  InitDriveStat VARPTR(DriveStat(DestDrive)), DEST$
  939.  
  940.  InitFileGroup APPFILES, APPOPTION, 0, "APP-MSPUB", SOURCE$, 0
  941.  InitFileGroup BDRFILES, APPOPTION, 0, "ARTS-BDR", SOURCE$, 0
  942.  InitFileGroup PUBFLTFILES, APPOPTION, 0, "FLT-PUB", SOURCE$, 0
  943.  InitFileGroup WINFILES, APPOPTION, 10, "APP-WIN", SourceDll$, 0
  944.  InitFileGroup WINSYSFILES, APPOPTION, 0, "APP-WINSYS", SourceDll$, 0
  945.  InitFileGroup WORDARTFILES, APPOPTION, 0, "WORDART", SOURCE$, 0
  946.  InitFileGroup ARTGALRYFILES, APPOPTION, 0, "ARTGALRY", SOURCE$, 0
  947.  InitFileGroup WIZFILES, APPOPTION, 0, "TEMP-WIZ", SOURCE$, 0
  948.  InitFileGroup WIZCGMFILES, APPOPTION, 0, "CGM-WIZ", SOURCE$, 0
  949.  InitFileGroup PUBFILES, TEMPOPTION, 0, "TEMP-PUB", SOURCE$, 0
  950.  
  951.  SourceDll$ = ""
  952.  
  953.  DRIVETEXT$   = "DriveStatusText"
  954.  
  955.  FOR i% = 1 TO NoOfSTATUS STEP 1
  956.   AddListItem DRIVETEXT$, ""
  957.  NEXT i%
  958.  
  959.  InitSizeCalLib
  960.  
  961.  FINCUST% = 0
  962.  
  963. WHILE 1
  964.  SetSymbolValue "SetupMode", STR$(SETUP_MODE%)
  965.  CallDlg WELCOME, "FInfoDlgProc", APPHELP
  966.  RemoveSymbol "SetupMode"
  967.  
  968.  IF DLG$ = "CONTINUE" THEN
  969.   UIPop 1
  970.  
  971.   IF IsPubRunning THEN
  972.    ERROR STFPUBRUN
  973.   END IF
  974.  
  975.   EXIT WHILE
  976.  ELSE
  977.   ERROR STFQUIT
  978.  END IF
  979. WEND
  980.  
  981. DOSPACE:
  982.  
  983. CalcFileSizes
  984.  
  985. FOR i% = 1 TO 7 STEP 1
  986.   ReplaceListItem DRIVETEXT$, i, LTRIM$(GetListItem(DRIVETEXT$, i))
  987. NEXT i%
  988. OLDDEST$ = DEST$
  989.  
  990. DEST$ = GETPATH(DEST$, DESTPATHN)
  991.  
  992. IF (OLDDEST$ <> DEST$) THEN
  993.  PubVersion% = VAL(MID$(GetVersionOfFile(MakePath(DEST$, "mspub.exe")),1,1))
  994.  IF PubVersion% = 2 THEN
  995.   ERROR STFPUBINST
  996.  END IF
  997.  CalcFileSizes
  998. END IF
  999.  
  1000. OLDDEST$ = ""
  1001.  
  1002. IF (DriveStat(DestDrive).Cost > DriveStat(DestDrive).Free) OR (DriveStat(WindowsDrive).Cost > DriveStat(WindowsDrive).Free) THEN
  1003.  SetSymbolValue "MsgBoxID", STR$(MSPNODISK)
  1004.  SetSymbolValue "MsgBoxStyle", STR$(MB_OK+MB_ICONHAND)
  1005.  i% = DoMessageBox()
  1006.  RemoveSymbol "MsgBoxID"
  1007.  RemoveSymbol "MsgBoxStyle"
  1008.  UIPop 2
  1009.  GOTO DOSPACE
  1010. END IF
  1011. UIPop 1
  1012.  
  1013.  
  1014. InstallFiles
  1015.  
  1016. QUIT:
  1017.  ON ERROR GOTO ERRQUIT
  1018.  
  1019.  IF ERR = 0 THEN
  1020.   IF RB% = 0 THEN
  1021.    dlgerr% = EXITSUCCESS
  1022.   ELSE
  1023.    dlgerr% = EXITREBOOT
  1024.   END IF
  1025.  ELSE
  1026.   dlgerr% = EXITFAILURE
  1027.  END IF
  1028.  
  1029.  DLG$ = ""
  1030.  
  1031.  IF ERR <> STFQUIT THEN
  1032.   WHILE 1
  1033.    SetSymbolValue "ErrMsg", STR$(ERR)
  1034.    CallDlg dlgerr%, "FInfo0DlgProc", APPHELP
  1035.    IF DLG$ <> "REACTIVATE" THEN
  1036.     EXIT WHILE
  1037.    END IF
  1038.   WEND
  1039.  
  1040.   UIPop 1
  1041.  END IF
  1042.  
  1043.  IF DLG$ = "CONTINUE" THEN
  1044.   IF RenamedPub% = 1 THEN
  1045.    SetSymbolValue "PubPath", FilePath(APPFILES,"MSPUB.EXE")
  1046.   ELSE
  1047.    SetSymbolValue "PubPath", FilePath(APPFILES,"PUBDEMO.EXE")
  1048.   END IF
  1049.   i% = RunPub()
  1050.  END IF
  1051.  
  1052. ERRQUIT:
  1053.  END
  1054.  
  1055. SUB CallDlg(DlgIDNo%, DlgProc$, HelpIDNo%) STATIC
  1056.  SetSymbolValue "DlgID", STR$(DlgIDNo%)
  1057.  DLG$ = UIStartDlg(CUIDLL$, DlgIDNo%, DlgProc$, HelpIDNo%, HELPPROC$)
  1058.  RemoveSymbol "DlgID"
  1059. END SUB
  1060.  
  1061. STATIC SUB InstallFiles
  1062.  ClearCopyList
  1063.  
  1064.  FOR Opt% = 1 TO MAXOPTIONGROUP-1 STEP 1
  1065.   AddOptionGrpToCopyList Opt%
  1066.  NEXT Opt%
  1067.  
  1068.  i% = BitmapCntrlInit()
  1069.  AddToBillboardList CUIDLL$, BILLBOARD, "FModelessDlgProc", 1
  1070.  SetCopyGaugePosition 140, 160
  1071.  CopyFilesInCopyList
  1072.  ClearCopyList
  1073.  
  1074.  IF DoesFileExist(FilePath(WINFILES, "ctl3d.dll"), femExists) THEN
  1075.   RemoveFile FilePath(WINFILES, "ctl3d.dll"), cmoNone
  1076.  END IF
  1077.  
  1078.  CallDlg WRITEINI, "FModelessDlgProc2", APPHELP
  1079.  
  1080.  IF (DoesFileExist(FilePath(APPFILES,"MSPUB.EXE"), femExists) = 0) THEN
  1081.   RenameFile FilePath(APPFILES, "PUBDEMO.EXE"), "MSPUB.EXE"
  1082.   RenamedPub% = 1
  1083.  END IF
  1084.  
  1085.  UpdateWinIni
  1086.  UpdatePubIni
  1087.  UpdateRegDat
  1088.  
  1089.  szValue$ = RTRIM$(FileGrp(WIZCGMFILES).DestPath)+", PUB20ART.IDX, PUB20ART.THM, Microsoft Publisher 2.0"
  1090.  SetIniKeyValue FilePath(WINFILES,"ARTGALRY.INI"), "Import", "File1", szValue$
  1091.  i% = WritePrivateProfileString(FilePath(WINFILES, "ARTGALRY.INI"), "", "", "")
  1092.  
  1093.  UIPop 1
  1094.  
  1095.  ''INTL Localize everything in quotes down to i% = ScAddShare
  1096.  MSSol$ = "MS Pub 2.0 Demo"
  1097.  szOpt$ = ""
  1098.  
  1099.  CreateProgmanGroup MSSol$, "", cmoNone
  1100.  ShowProgmanGroup MSSol$, 1, cmoNone
  1101.  IF RenamedPub% THEN
  1102.   CreateProgmanItem MSSol$, "Microsoft Publisher Demo", FilePath(APPFILES, "mspub.exe"), szOpt$, cmoOverwrite
  1103.  ELSE
  1104.   CreateProgmanItem MSSol$, "Microsoft Publisher Demo", FilePath(APPFILES, "pubdemo.exe"), szOpt$, cmoOverwrite
  1105.  END IF
  1106.  CreateProgmanItem MSSol$, "INFODEMO", FilePath(APPFILES, "infodemo.txt"), "", cmoOverwrite
  1107.  szOpt$ = ""
  1108.  
  1109.  i% = ScAddShare
  1110.  SELECT CASE i%
  1111.   CASE SCERROR
  1112.    ERROR STFSHARE
  1113.   CASE SCOK
  1114.    RB% = 0
  1115.   CASE SCREBOOT
  1116.    RB% = 1
  1117.  END SELECT
  1118. END SUB
  1119.  
  1120. SUB UpdateRegDat STATIC
  1121.  Load$ = FilePath(WINFILES, "REGEDIT.EXE /s ")
  1122.  MakeReg Load$, WORDARTFILES, "WordArt2", "WordArt2"
  1123.  MakeReg Load$, ARTGALRYFILES, "artgalry", "artgalry"
  1124.  IF RenamedPub% = 1 THEN
  1125.   MakeReg Load$, APPFILES, "mspub", "mspub"
  1126.  ELSE
  1127.   MakeReg Load$, APPFILES, "mspub", "pubdemo"
  1128.  END IF
  1129.  
  1130.  i% = RUN(Load$ + FilePath(WINFILES, "OLE2.REG"))
  1131.  i% = RUN(Load$ + FilePath(APPFILES, "OLE1.REG"))
  1132.  Load$ = ""
  1133. END SUB
  1134.  
  1135. SUB MakeReg(Load$, FileID%, szReg$, szExe$) STATIC
  1136.  Reg$ = FilePath(FileID, szReg$)
  1137.  
  1138.  i% = FMakeReg(Reg$, FilePath(FileID%, szExe$)+".exe")
  1139.  IF i% = 0 THEN
  1140.   ERROR STFERR
  1141.  END IF
  1142.  i% = RUN(Load$ + Reg$ + ".REG")
  1143.  
  1144.  Reg$ = ""
  1145. END SUB
  1146.  
  1147. SUB UpdateWinIni STATIC
  1148.  Ini$ = "WIN.INI"
  1149.  MsApps$ = MakePath(GetWindowsDir,"MSAPPS")
  1150.  
  1151.  szValue$ = FilePath(APPFILES, "MSPUB.EXE ^.pub")
  1152.  SetIniKeyValue Ini$, "Extensions", "pub", szValue$
  1153.  
  1154.  szValue$ = FilePath(PUBFLTFILES, "cgmimp.flt,CGM")
  1155.  SetIniKeyValue "WIN.INI", "MS Graphic Import Filters", "Computer Graphics MetaFile(.CGM)", szValue$
  1156.  szValue$ = FilePath(PUBFLTFILES, "wmfimp.flt,WMF")
  1157.  SetIniKeyValue "WIN.INI", "MS Graphic Import Filters", "Windows Metafile(.WMF)", szValue$
  1158.  
  1159.  SetIniKeyValue Ini$, "MSAPPS", "MSAPPS", MsApps$
  1160.  SetIniKeyValue Ini$, "MSAPPS", "WORDART", MakePath(MsApps$, "WORDART")
  1161.  SetIniKeyValue Ini$, "MSAPPS", "ARTGALRY", MakePath(MsApps$, "ARTGALRY")
  1162.  
  1163.  i% = WritePrivateProfileString(Ini$, "", "", "")
  1164.  szValue$ = ""
  1165.  Ini$ = ""
  1166.  MsApps$ = ""
  1167. END SUB
  1168.  
  1169. SUB UpdatePubIni STATIC
  1170.  Ini$ = FilePath(WINFILES,"MSPUB.INI")
  1171.  
  1172.  IF PubVersion% = 0 THEN
  1173.   RemoveIniSection Ini$, "Help", cmoNone
  1174.   RemoveIniSection Ini$, "Clipart", cmoNone
  1175.   szValue$ = FilePath(APPFILES,"hyph.dat")
  1176.   SetIniKeyValue Ini$, "Hyphenation", "Dictionary", szValue$
  1177.  END IF
  1178.  
  1179.  IF DoesIniKeyExist(Ini$, "Preferences", "ShowIntroductionToPublisher") THEN
  1180.   RemoveIniKey Ini$, "Preferences", "ShowIntroductionToPublisher", cmoNone
  1181.  END IF
  1182.  
  1183.  SetIniKeyValue Ini$, "Justification", "Default", "75,100,250,5,85,100,150,5"
  1184.  szValue$ = "75,100,250,0,85,100,150,0"
  1185.  SetIniKeyValue Ini$, "Justification", "Brush Script MT", szValue$
  1186.  SetIniKeyValue Ini$, "Justification", "Lucida Handwriting", szValue$
  1187.  SetIniKeyValue Ini$, "Justification", "Mistral", szValue$
  1188.  SetIniKeyValue Ini$, "Justification", "Vivaldi", szValue$
  1189.  
  1190.  ''INTL Localize down to the end of the Wizard section -
  1191.  ''     down to the Logo Creator Plus line inclusive.
  1192.  ''     Localize only the Wizard names - ex: "Ad"
  1193.  szValue$ = "PageWizard 2.0"
  1194.  SetIniKeyValue Ini$, szValue$, "Anzeige", "dembogus.wiz,AREA"
  1195.  SetIniKeyValue Ini$, szValue$, "Transparent", "dembogus.wiz,NEW"
  1196.  SetIniKeyValue Ini$, szValue$, "Broschⁿre", "dembogus.wiz,NEW"
  1197.  SetIniKeyValue Ini$, szValue$, "GeschΣftspapiere", "dembogus.wiz,NEW"
  1198.  SetIniKeyValue Ini$, szValue$, "Kalender", "dembogus.wiz,NEW,AREA"
  1199.  SetIniKeyValue Ini$, szValue$, "Gutschein", "dembogus.wiz,AREA"
  1200.  SetIniKeyValue Ini$, szValue$, "Umschlag", "dembogus.wiz,NEW"
  1201.  SetIniKeyValue Ini$, szValue$, "Initiale", "dembogus.wiz,AREA"
  1202.  SetIniKeyValue Ini$, szValue$, "Flugblatt", "dembogus.wiz,NEW"
  1203.  SetIniKeyValue Ini$, szValue$, "Karten", "dembogus.wiz,NEW"
  1204.  SetIniKeyValue Ini$, szValue$, "Schlagzeilen", "dembogus.wiz,AREA"
  1205.  SetIniKeyValue Ini$, szValue$, "Papierflugzeug", "dembogus.wiz,NEW"
  1206.  SetIniKeyValue Ini$, szValue$, "GeschΣftsformulare", "dembogus.wiz,NEW"
  1207.  SetIniKeyValue Ini$, szValue$, "Origami", "dembogus.wiz,NEW"
  1208.  SetIniKeyValue Ini$, szValue$, "Kassettenhⁿlle", "dembogus.wiz,NEW"
  1209.  
  1210.  '' 6363
  1211.  SetIniKeyValue Ini$, szValue$, "Magazin", "mspgorgm.wiz,NEW"
  1212.  
  1213.  SetIniKeyValue Ini$, szValue$, "Logo", "mspglogo.wiz,AREA"
  1214.  
  1215.  Demo$ =  "DEMO.CCD "
  1216.  SetIniKeyValue Ini$, "Demo", "Gotobackground", Demo$ + "-p background1"
  1217.  SetIniKeyValue Ini$, "Demo", "Grouping", Demo$ + "-p grouping1"
  1218.  SetIniKeyValue Ini$, "Demo", "Layering", Demo$ + "-p layer1"
  1219.  SetIniKeyValue Ini$, "Demo", "FlowButton", Demo$ + "-p linking1"
  1220.  SetIniKeyValue Ini$, "Demo", "Style", Demo$ + "-p style1"
  1221.  SetIniKeyValue Ini$, "Demo", "Table", Demo$ + "-p tables1"
  1222.  SetIniKeyValue Ini$, "Demo", "startup", "intropub.ccd"
  1223.  
  1224.  SetIniKeyValue Ini$, "Cue Cards", "Blank Page", "blankcc.ccd -h %h"
  1225.  SetIniKeyValue Ini$, "Cue Cards", "Blank Page_Menu", "blankcc.ccd -p bmmenu -h %h"
  1226.  SetIniKeyValue Ini$, "Cue Cards", "Template", "tempcc.ccd -h %h"
  1227.  SetIniKeyValue Ini$, "Cue Cards", "Template_Menu", "tempcc.ccd -p tmainmenu -h %h"
  1228.  SetIniKeyValue Ini$, "Cue Cards", "Template_Wizard", "tempcc.ccd -p tmpwizmain1 -h %h"
  1229.  SetIniKeyValue Ini$, "Cue Cards", "Newsletter", "newscc.ccd -h %h"
  1230.  SetIniKeyValue Ini$, "Cue Cards", "Newsletter_Menu", "newscc.ccd -p nmainmenu -h %h"
  1231.  
  1232.  i% = WritePrivateProfileString(Ini$, "", "", "")
  1233. LNOWRITE:
  1234.  Ini$ = ""
  1235.  Demo$ = ""
  1236.  szValue$ = ""
  1237. END SUB
  1238.  
  1239. SUB CalcFileSizes STATIC
  1240.  CallDlg CALCFILE, "FModelessDlgProc2", APPHELP
  1241.  ChangeFileDestPath
  1242.  UpdateSizeCal ALL, 1
  1243.  UpdateScreenStatus ALL
  1244.  UIPop 1
  1245. END SUB
  1246.  
  1247. SUB SetDriveText(DriveStat AS POINTER TO DRIVESTAT) STATIC
  1248.  
  1249.  WinDriveNo% = ASC(ucase$(MID$(GetWindowsDir,1,1))) - ASC("A") + 1
  1250.  
  1251.  ReplaceListItem DRIVETEXT$, 1, DriveStat[DestDrive].Drive + ":"
  1252.  ReplaceListItem DRIVETEXT$, 2, STR$(DriveStat[DestDrive].Cost / 1024) + " K"
  1253.  ReplaceListItem DRIVETEXT$, 3, STR$(DriveStat[DestDrive].Free / 1024) + " K"
  1254.  
  1255.  IF DriveStat[DestDrive].DriveNo = WinDriveNo% THEN
  1256.   ReplaceListItem DRIVETEXT$, 4, ""
  1257.   ReplaceListItem DRIVETEXT$, 5, ""
  1258.   ReplaceListItem DRIVETEXT$, 6, ""
  1259.  ELSE
  1260.   IF DriveStat[WindowsDrive].Cost = 0 THEN
  1261.    ReplaceListItem DRIVETEXT$, 4, ""
  1262.    ReplaceListItem DRIVETEXT$, 5, ""
  1263.    ReplaceListItem DRIVETEXT$, 6, ""
  1264.   ELSE
  1265.    ReplaceListItem DRIVETEXT$, 4, DriveStat[WindowsDrive].Drive + ":"
  1266.    ReplaceListItem DRIVETEXT$, 5, STR$(DriveStat[WindowsDrive].Cost / 1024) + " K"
  1267.    ReplaceListItem DRIVETEXT$, 6, STR$(DriveStat[WindowsDrive].Free / 1024) + " K"
  1268.   END IF
  1269.  END IF
  1270.  
  1271. END SUB
  1272.  
  1273. SUB ChangeFileDestPath STATIC
  1274.  
  1275.  Win$ = GetWindowsDir
  1276.  Sys$ = GetWindowsSysDir
  1277.  MsApps$ = MakePath(GetWindowsDir,"MSAPPS")
  1278.  
  1279.  InitDriveStat VARPTR(DriveStat(DestDrive)), DEST$
  1280.  ReplaceListItem DRIVETEXT$, 7, DEST$
  1281.  
  1282.  ChangeDestPath APPFILES, DEST$
  1283.  
  1284.  '' INTL Localize the directory names in the following lines.
  1285.  ''      Stop at the first blank line.
  1286.  ChangeDestPath PUBFILES, MakePath(DEST$,"VORLAGEN")
  1287.  ChangeDestPath WIZFILES, MakePath(DEST$,"ASSIST")
  1288.  ChangeDestPath WIZCGMFILES, MakePath(DEST$,"ASSIST")
  1289.  ChangeDestPath BDRFILES, MakePath(DEST$,"RAHMEN")
  1290.  
  1291.  ChangeDestPath WINFILES, Win$
  1292.  ChangeDestPath WINSYSFILES, Sys$
  1293.  ChangeDestPath WORDARTFILES, MakePath(MsApps$,"WORDART")
  1294.  ChangeDestPath ARTGALRYFILES, MakePath(MsApps$,"ARTGALRY")
  1295.  ChangeDestPath PUBFLTFILES, MakePath(MsApps$,"GRPHFLT")
  1296.  
  1297.  Win$ = ""
  1298.  Sys$ = ""
  1299.  MsApps$ = ""
  1300.  
  1301. END SUB
  1302.  
  1303. SUB UpdateSizeCal(OptionNo%, fRecalc%) STATIC
  1304.  CursorSave% = ShowWaitCursor()
  1305.  IF fRecalc% <> 0 THEN
  1306.   IF OptionNo% = 0 THEN
  1307.    RecalcPath
  1308.   ELSE
  1309.    RecalcOptFiles OptionNo%
  1310.   END IF
  1311.  END IF
  1312.  SetDriveStatus VARPTR(DriveStat(0)), MaxDrive
  1313.  RestoreCursor CursorSave%
  1314. END SUB
  1315.  
  1316. SUB UpdateScreenStatus(OptionNo%) STATIC
  1317.  CursorSave% = ShowWaitCursor()
  1318.  SetDriveText VARPTR(DriveStat(0))
  1319.  RestoreCursor CursorSave%
  1320. END SUB
  1321.  
  1322. STATIC FUNCTION GETPATH(DefaultPath$, DlgTextID%) AS STRING
  1323.  SetSymbolValue "EditTextIn", DefaultPath$
  1324.  SetSymbolValue "EditFocus", "END"
  1325.  NewPath$ = DefaultPath$
  1326.  
  1327.  WHILE 1
  1328.   SetSymbolValue "FInCust", STR$(FINCUST%)
  1329.   CallDlg DESTPATHN, "FEditDlgProc", HELPPATH
  1330.   RemoveSymbol "FInCust"
  1331.  
  1332.   SELECT CASE DLG$
  1333.    CASE "CONTINUE"
  1334.     NewPath$ = GetSymbolValue("EditTextOut")
  1335.  
  1336.     IF IsDirWritable(NewPath$) = 0 THEN
  1337.      WHILE 1
  1338.       CallDlg BADPATH, "FInfo0DlgProc", APPHELP
  1339.       IF DLG$ <> "REACTIVATE" THEN
  1340.        EXIT WHILE
  1341.       END IF
  1342.      WEND
  1343.      UIPop 1
  1344.     ELSEIF DoesFileExist(MakePath(NewPath$,"MSPUB.EXE"), femExists) THEN
  1345.      IF VAL(MID$(GetVersionOfFile(MakePath(NewPath$,"MSPUB.EXE")),1,1)) = 2 THEN
  1346.       ERROR STFPUBINST
  1347.      END IF
  1348.      WHILE 1
  1349.       CallDlg PREVPUB, "FInfo0DlgProc", APPHELP
  1350.       SELECT CASE DLG$
  1351.        CASE "CONTINUE"
  1352.         UIPOP 1
  1353.         GOTO GOTPATH
  1354.        CASE "REACTIVATE"
  1355.        CASE ELSE
  1356.         UIPOP 1
  1357.         EXIT WHILE
  1358.       END SELECT
  1359.      WEND
  1360.     ELSE
  1361. GOTPATH:
  1362.      UIPop 1
  1363.  
  1364.      GETPATH = NewPath$
  1365.      EXIT WHILE
  1366.     END IF
  1367.  
  1368.    CASE "REACTIVATE"
  1369.    CASE ELSE
  1370.     IF FINCUST% = 1 THEN
  1371.      UIPop 1
  1372.      GETPATH = DefaultPath$
  1373.      EXIT WHILE
  1374.     END IF
  1375.  
  1376.     QuitProc
  1377.   END SELECT
  1378.  WEND
  1379.  
  1380.  RemoveSymbol "EditTextIn"
  1381.  RemoveSymbol "EditFocus"
  1382.  DefaultPath$ = ""
  1383.  NewPath$ = ""
  1384.  
  1385. END FUNCTION
  1386.  
  1387. SUB QuitProc STATIC
  1388.  WHILE 1
  1389.   CallDlg ASKQUIT, "FQuitDlgProc", APPHELP
  1390.  
  1391.   IF DLG$ = "EXIT" THEN
  1392.    UIPopAll
  1393.    ERROR STFQUIT
  1394.   ELSE
  1395.    UIPop 1
  1396.    EXIT WHILE
  1397.   END IF
  1398.  WEND
  1399. END SUB
  1400.  
  1401.